<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class DetallesReserva extends CI_Controller {

    public function __construct() {
        parent::__construct();
        session_start();
        $this->estaLogueado();
        $this->load->model('reservam');
        $this->load->model('ingreso_reservam');
        $this->load->model('tarifa_x_diam');
        $this->load->model('venta_producto_serviciom');
        $this->load->model('establecimientoM');
        $this->load->model('ajusteM');
        $this->load->model('cliente_x_reservam');
        $this->load->model('procedencia_destinom');
        $this->load->model('paisM');
        $this->load->model('clienteM');
        $this->load->model('documentoM');
        $this->load->model('usuariosM');
        $this->load->model('cliente_x_reservam');
        $this->load->model('categoria_producto_serviciom');
        $this->load->model('impuestoM');
        $this->load->model('categoriam');
        $this->load->model('agenciam');
        $this->validarReserva();
    }

    public function index() {

        $data = array();
        $this->loadData($data);
        $this->load->view('header', $data);
        $this->load->view('menuCalendarioV/detallesReservaV');
        $this->load->view('footer');
    }

    private function loadData(&$data) {
        $this->escapar($_GET);
        $data["moneda"] = $_SESSION["establecimiento"]["moneda"];
        $idReserva = $_GET['id'];
        $data['tab'] = 'detallesReserva';
        $data['detallesBasicos'] = $this->reservam->detallesBasicos($idReserva);
        $data["cantidad_noches"] = $this->diferenciaFechas($data['detallesBasicos'][0]->fecha_ingreso, $data['detallesBasicos'][0]->fecha_salida);
        $fechaIngreso = $data['detallesBasicos'][0]->fecha_ingreso;
        $fechaSalida = $data['detallesBasicos'][0]->fecha_salida;
        $this->formatoFechaVista($data['detallesBasicos'][0]->fecha_ingreso);
        $this->formatoFechaVista($data['detallesBasicos'][0]->fecha_salida);
        $data["ingresos"] = $this->ingreso_reservam->obtenerIngresos($idReserva);
        $costoHospedajeSinImp = $this->tarifa_x_diam->obtenerCostosHospedaje($idReserva);
        $data["totalConsumos"] = $this->venta_producto_serviciom->obtenerTotalConsumos($idReserva);
        $data["totalImpuestosConsumo"] = $this->venta_producto_serviciom->obtenerTotalImpuestosConsumos($idReserva);
        $data["seguroHotelero"] = $this->establecimientoM->obtenerDatos("tiene_seguro_hotelero, seguro_hotelero", $_SESSION["establecimiento"]["id_establecimiento"]);
        $data["ajustes"] = $this->ajusteM->obtenerAjustes($idReserva);
        $data["sumaTotalPagar"] = (float) ($data['detallesBasicos'][0]->impuesto + $costoHospedajeSinImp[0]->totalHospedaje + $data["totalConsumos"][0]->totalConsumos + $data["totalImpuestosConsumo"][0]->totalImpuestosConsumo + $data["seguroHotelero"][0]->seguro_hotelero + $data["ajustes"][0]->totalAjuste);
        $data['borde'] = $this->bordeEstatus($data, $fechaIngreso, $fechaSalida);
        /* Cambiar Habitacion */
        if ($data['detallesBasicos'][0]->checkin_realizado != 1) {
            $data['categoriasCuartos'] = $this->categoriam->obtenerTodasCategorias();
        }
        /* ---------- */


        /* ---- Alojamiento --- */
        $data["tarifa_x_dia"] = $this->tarifa_x_diam->obtenerTarifasPorReserva($idReserva);
        foreach ($data["tarifa_x_dia"] as $row) {
            $row->dia = new DateTime($row->dia);
            $row->dia = $row->dia->format('d/m/Y');
        }
        $data["impuestos"] = $this->impuestoM->obtenerImpuestos($_SESSION["establecimiento"]["id_establecimiento"]);

        /* --------- */

        /* Consumos */
        $data["ajustesAlojamiento"] = $this->ajusteM->obtenerSumaAjustesAlojamieno($idReserva);
        $data["ajustesAlojamiento"][0]->totalAjusteAlojamiento = $data["ajustesAlojamiento"][0]->totalAjusteAlojamiento * -1;
        $data["consumos"] = $this->venta_producto_serviciom->obtenerVentas($idReserva);
        foreach ($data["consumos"] as $row) {
            $row->fecha = new DateTime($row->fecha);
            $row->fecha = $row->fecha->format('d/m/Y H:i:s');
        }
        $data["categorias"] = $this->categoria_producto_serviciom->obtenerCategorias($_SESSION["establecimiento"]["id_establecimiento"]);
        $data["impuestos"] = $this->impuestoM->obtenerImpuestos($_SESSION["establecimiento"]["id_establecimiento"]);
        /* -- */

        /* ---Pagos --- */
        $data["pagosRealizados"] = $this->ingreso_reservam->listarIngresos($idReserva);
        foreach ($data["pagosRealizados"] as $row) {
            $nombreCompleto = $this->usuariosM->obtenerDatos("nombre_completo", $row->usuario_encargado);
            $row->usuario_creacion = $nombreCompleto[0]->nombre_completo;
            $row->fecha = new DateTime($row->fecha);
            $row->fecha = $row->fecha->format('d/m/Y H:i:s');
        }

        /* ----- */

        /* Ajustes */

        $data["listaAjustes"] = $this->ajusteM->listarAjustes($idReserva);
        foreach ($data["listaAjustes"] as $row) {
            $nombreCompleto = $this->usuariosM->obtenerDatos("nombre_completo", $row->usuario_encargado);
            $row->usuario_creacion = $nombreCompleto[0]->nombre_completo;
            $this->formatoFechaVista($row->fecha);
            $row->valor = $row->valor * -1;
        }
        /* -------- */

        /* --Huespedes */
        $data["huespedes"] = $this->cliente_x_reservam->cargarHuespedes($idReserva);
        foreach ($data['huespedes'] as $clientes) {
            $this->formatoFechaVista($clientes->fecha_nacimiento);
            $clientes->datosProcedencia = $this->procedencia_destinom->obtenerRegistro($idReserva, $clientes->id_cliente);
            $clientes->nacionalidad = $this->paisM->obtenerNombre($clientes->id_pais);
        }
        $data["datosTitular"] = $this->clienteM->obtenerDatos('*', $data['detallesBasicos'][0]->id_cliente);
        $data["datosTitular"][0]->nacionalidad = $this->paisM->obtenerNombre($data["datosTitular"][0]->id_pais);
        $data["datosTitular"][0]->datosProcedencia = array();
        $data['paises'] = $this->clienteM->getListaPaises();
        $data["documentos"] = $this->documentoM->obtenerDocumentos();

        $data["huespedesRegistrados"] = $this->cliente_x_reservam->contarHuespedes($idReserva);

        /* ---- */



        /* Detalles */

        $data["fechaCreacion"] = new DateTime($data['detallesBasicos'][0]->fecha_creacion);
        $data["fechaCreacion"] = $data["fechaCreacion"]->format('d/m/Y H:i:s');
        $data["nombreUsuarioCreacion"] = $this->usuariosM->obtenerDatos("nombre_completo", $data['detallesBasicos'][0]->usuario_creacion);

        $data["fecha_check_in"] = new DateTime($data['detallesBasicos'][0]->fecha_check_in);
        $data["fecha_check_in"] = $data["fecha_check_in"]->format('d/m/Y H:i:s');
        $data["nombreUsuarioCheckin"] = $this->usuariosM->obtenerDatos("nombre_completo", $data['detallesBasicos'][0]->usuario_check_in);

        $data["fecha_check_out"] = new DateTime($data['detallesBasicos'][0]->fecha_check_out);
        $data["fecha_check_out"] = $data["fecha_check_out"]->format('d/m/Y H:i:s');
        $data["nombreUsuarioCheckout"] = $this->usuariosM->obtenerDatos("nombre_completo", $data['detallesBasicos'][0]->usuario_check_in);

        if ($data['detallesBasicos'][0]->tipo_agencia == "online") {
            $auxAgencia = $this->agenciam->getAgenciaOnline($data['detallesBasicos'][0]->nombre_agencia);
            $data['detallesBasicos'][0]->nombre_agencia = $auxAgencia[0]->nombre;
        }
        $data["agenciasTradicionales"] = $this->agenciam->listarAgencias($_SESSION['establecimiento']['id_establecimiento']);
        $data["agenciasOnline"] = $this->agenciam->listarAgenciasOnline($_SESSION['establecimiento']['id_establecimiento']);
        $data["canales"] = $this->agenciam->listarCanalOtros($_SESSION["establecimiento"]["id_establecimiento"]);

        $data["titular"] = $this->clienteM->obtenerDatos("*", $data["detallesBasicos"][0]->id_cliente);
        $esHueped = $this->cliente_x_reservam->existeClienteEnReserva($idReserva, $data["titular"][0]->id_cliente);

        if ($esHueped[0]->cantidad == 1) {
            $data["titularEsHuesped"] = "si";
        } else {
            $data["titularEsHuesped"] = "no";
        }
        /* -- */
    }

    private function bordeEstatus(&$data, $fechaIngreso, $fechaSalida) {
        $fechaIngreso = $fechaIngreso;
        $fechaSalida = $fechaSalida;
        $hoy = date("Y-m-d");
        if ($fechaIngreso <= $hoy) {
            $data['detallesBasicos'][0]->checkinHabilitado = "si";
        } else {
            $data['detallesBasicos'][0]->checkinHabilitado = "no";
        }
        if ($fechaSalida <= $hoy) {
            $data['detallesBasicos'][0]->checkOutHabilitado = "si";
        } else {
            $data['detallesBasicos'][0]->checkOutHabilitado = "no";
        }

        $hoy = date("Y-m-d");
        $borde = "";
        if ($data['detallesBasicos'][0]->confirmada != 1) {
              $borde = "bnoconfirmada";
        } else {
            if ($data['detallesBasicos'][0]->checkin_realizado != 1 && $fechaIngreso <= $hoy)
                $borde = "pCheck-in";
            else if ($data['detallesBasicos'][0]->checkin_realizado == 1 && !($fechaSalida <= $hoy)) {
                $borde = "Check-inR";
            } else if ($data['detallesBasicos'][0]->checkout_realizado != 1 && $fechaSalida <= $hoy) {
                $borde = "pCheck-out";
            } else if ($data['sumaTotalPagar'] - $data['ingresos'][0]->totalIngreso == 0) {
                $borde = "b" . $data['detallesBasicos'][0]->estatus;
            } else if ($data['detallesBasicos'][0]->estatus == "fin") {
                $borde = "bfincondeuda";
            } else {
                $borde = "b" . $data['detallesBasicos'][0]->estatus;
            }
        }
        return $borde;
    }

    private function validarReserva() {
        $flag = false;
        if (!empty($_GET["id"])) {
            $r = $this->reservam->esMiReserva($_GET["id"], $_SESSION['establecimiento']['id_establecimiento']);
            if ($r[0]->cantidad != 1) {
                $flag = true;
            }
        } else {
            $flag = true;
        } if ($flag) {
            $_SESSION["mensaje"]["contenido"] = " La reserva no existe.";
            $_SESSION["mensaje"]["tipo"] = "advertencia";
            header("Location:calendario");
            exit();
        }
    }

    private function diferenciaFechas($desde, $hasta) {
        $datetime1 = date_create($desde);
        $datetime2 = date_create($hasta);
        $intervalo = date_diff($datetime1, $datetime2);
        return $intervalo->days;
    }

}